#include "Converter.h"

XML_BIND_NAMESPACE_BEGIN

string ConvertToString(const int& intValue) 
{
	char szInt[64];
	sprintf(szInt, "%d", intValue);
	return szInt; 
} 

string ConvertToString(const unsigned int& intValue)
{
	char szInt[64];
	sprintf(szInt, "%u", intValue);
	return szInt; 
}

string ConvertToString(const short& shortValue)
{
	return ConvertToString((const int&)shortValue);
}

string ConvertToString(const unsigned short& shortValue)
{
	return ConvertToString((const unsigned int&)shortValue);
}

string ConvertToString(const long& longValue)
{
	char szLong[128];
	sprintf(szLong, "%ld", longValue);
	return szLong; 
}

string ConvertToString(const unsigned long& longValue)
{
	char szLong[128];
	sprintf(szLong, "%lu", longValue);
	return szLong; 
}

string ConvertToString(const long long& longlongValue)
{
	char szLongLong[128];
	sprintf(szLongLong, "%lld", longlongValue);
	return szLongLong; 
}

string ConvertToString(const unsigned long long& longlongValue)
{
	char szLongLong[128];
	sprintf(szLongLong, "%llu", longlongValue);
	return szLongLong; 
}

string ConvertToString(const double& doubleValue)
{
	char szDouble[512];
	sprintf(szDouble, "%f", doubleValue);
	return szDouble; 
}

string ConvertToString(const float& floatValue)
{
	return ConvertToString((const double&)floatValue);
}

string ConvertToString(const bool& boolValue)
{
	return boolValue ? "true" : "false";
}

string ConvertToString(const char* szValue)
{
	return szValue;
}

string ConvertToString(const wchar_t* szValue)
{
	char* szBuffer = NULL;
	EncodingHelper::TransformCharset(szValue, &szBuffer, "unicode", "utf-8");
	string szText(szBuffer);
	EncodingHelper::FreeString(szBuffer);
	return szText;
}

string ConvertToString(const string& szValue)
{
	return szValue;
}

string ConvertToString(const wstring& szValue)
{
	return ConvertToString(szValue.c_str());
}

void ConvertFromString(const string& text, int* intValue) 
{
	*intValue = atoi(text.c_str());
}

void ConvertFromString(const string& text, unsigned int* intValue)
{
	ConvertFromString(text, (int*)intValue);
}

void ConvertFromString(const string& text, short* shortValue)
{
	int i = 0;
	ConvertFromString(text, &i);
	*shortValue = i;
}

void ConvertFromString(const string& text, unsigned short* shortValue)
{
	ConvertFromString(text, (short*)shortValue);
}

void ConvertFromString(const string& text, long* longValue)
{
	*longValue = atol(text.c_str());
}

void ConvertFromString(const string& text, unsigned long* longValue)
{
	ConvertFromString(text, (long*)longValue);
}

void ConvertFromString(const string& text, long long* longValue)
{
#ifndef WIN32
	*longValue = atoll(text.c_str());
#else
	*longValue = _atoi64(text.c_str());
#endif
}

void ConvertFromString(const string& text, unsigned long long* longValue)
{
	ConvertFromString(text, (long long*)longValue);
}

void ConvertFromString(const string& text, double* doubleValue)
{
	*doubleValue = atof(text.c_str());
}

void ConvertFromString(const string& text, float* floatValue)
{
	double d;
	ConvertFromString(text, &d);
	*floatValue = d;
}

void ConvertFromString(const string& text, bool* boolValue)
{
	*boolValue = text == "true";
}

void ConvertFromString(const string& text, char** szValue)
{
	*szValue = strdup(text.c_str());
}

void ConvertFromString(const string& text, wchar_t** szValue)
{
	EncodingHelper::TransformCharset(text.c_str(), szValue, "utf-8", "unicode");
}

void ConvertFromString(const string& text, string* szValue)
{
	*szValue = text;
}

void ConvertFromString(const string& text, wstring* szValue)
{
	wchar_t* szBuffer = NULL;
	EncodingHelper::TransformCharset(text.c_str(), &szBuffer, "utf-8", "unicode");
	*szValue = szBuffer;
	EncodingHelper::FreeString(szBuffer);
}

XML_BIND_NAMESPACE_END